]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionPrefs: Export parent window for prefs dialog
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 5 Mar 2020 17:01:38 +0000 (18:01 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 26 Mar 2020 17:32:30 +0000 (18:32 +0100)
Now that OpenExtensionPrefs()'s parentWindow parameter is actually
supported, export the main application window so it can act as
transient parent to the prefs dialog.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1087

js/extensionPrefs/js/main.js

index c4bb4fa5af2a66f402cdb07cbe99f7572dfaddf1..d25df9c576f205b141e159af1282283a2fa3a246 100644 (file)
@@ -4,7 +4,7 @@ imports.gi.versions.Gtk = '3.0';
 
 const Gettext = imports.gettext;
 const Package = imports.package;
-const { Gdk, GLib, Gio, GObject, Gtk } = imports.gi;
+const { Gdk, GLib, Gio, GObject, Gtk, Shew } = imports.gi;
 
 Package.initFormat();
 
@@ -15,6 +15,8 @@ const { ExtensionState, ExtensionType } = ExtensionUtils;
 const GnomeShellIface = loadInterfaceXML('org.gnome.Shell.Extensions');
 const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
 
+Gio._promisify(Shew.WindowExporter.prototype, 'export', 'export_finish');
+
 function loadInterfaceXML(iface) {
     const uri = 'resource:///org/gnome/Extensions/dbus-interfaces/%s.xml'.format(iface);
     const f = Gio.File.new_for_uri(uri);
@@ -89,6 +91,9 @@ var ExtensionsWindow = GObject.registerClass({
 
         this._updatesCheckId = 0;
 
+        this._exporter = new Shew.WindowExporter({ window: this });
+        this._exportedHandle = '';
+
         this._mainBox.set_focus_vadjustment(this._scrolledWindow.vadjustment);
 
         let action;
@@ -152,9 +157,17 @@ var ExtensionsWindow = GObject.registerClass({
         dialog.present();
     }
 
-    openPrefs(uuid) {
+    async openPrefs(uuid) {
+        if (!this._exportedHandle) {
+            try {
+                this._exportedHandle = await this._exporter.export();
+            } catch (e) {
+                log('Failed to export window: %s'.format(e.message));
+            }
+        }
+
         this._shellProxy.OpenExtensionPrefsRemote(uuid,
-            '',
+            this._exportedHandle,
             { modal: new GLib.Variant('b', true) });
     }